<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/%E8%BF%AA.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/%E8%BF%AA.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"zhengyidi.github.io","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":"flat","style":null},"back2top":{"enable":true,"sidebar":true,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="设计模式 - 结构型 - 桥接模式">
<meta property="og:type" content="article">
<meta property="og:title" content="13.桥接模式">
<meta property="og:url" content="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/13.%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F/index.html">
<meta property="og:site_name" content="Zhengyidi&#96;s 学习记录">
<meta property="og:description" content="设计模式 - 结构型 - 桥接模式">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-07-11T00:00:00.000Z">
<meta property="article:modified_time" content="2021-11-13T14:58:22.506Z">
<meta property="article:author" content="zhengyidi">
<meta property="article:tag" content="设计模式">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/13.%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>13.桥接模式 | Zhengyidi`s 学习记录</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<link rel="alternate" href="/atom.xml" title="Zhengyidi`s 学习记录" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Zhengyidi`s 学习记录</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">休对故人思故国，且将新火试新茶。诗酒趁年华。</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://zhengyidi.github.io/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/13.%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="zhengyidi">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Zhengyidi`s 学习记录">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          13.桥接模式
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2021-07-11 00:00:00" itemprop="dateCreated datePublished" datetime="2021-07-11T00:00:00+00:00">2021-07-11</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2021-11-13 14:58:22" itemprop="dateModified" datetime="2021-11-13T14:58:22+00:00">2021-11-13</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" itemprop="url" rel="index"><span itemprop="name">设计模式</span></a>
                </span>
            </span>

          
            <div class="post-description">设计模式 - 结构型 - 桥接模式</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">
  <script id="hbeData" type="hbeData" data-hmacdigest="8d98d3862f6440a1c38645a7c72bcaedd2c4ebab7860066f44743a7de93448bf">22064b17c03cb0c0e58c99349b6889d0b31470871e725085fde7c8feed9af7effd3e97d0dbb0f4ecf926cc3c511893df3d4e59612e5fe0617afbc6c76c1180b3172b0ef4deba8b541b65ca2dedebef7af07782ae6fc4f4fecaaa9690d969a64afe19be477c438d81501f0fc1245715e4c82f4c2d2aedeb01ced994a391c2da0a274d33fb0796aac590a300f79f843505b8315314b3599419b7a04df814118ae1dcf6f721444dce9144c956e364b5d12f3a76bb85b8d94c9deb63f2ea4ba6ccf6e74cc053d84c1a33d3f83c6fc932649d0c8c9dac8875e5906bb77c626d65133c13feb8b4f6f9bb8050a3f839769e8d7575dbb1c6d8d275c2639f57d4b23bb9813b735448cff168988c8f08ab391d7a985f5f14ac037831eda2d125426ecc7fc8f9bef2ed0c46a8ee94388c3343b9e6f6c2b842743f19e0289debf3b394caccc58e4e3ebb77c9657740fd8b38c09c69eedead51eca90a556f6e2eb40e8387ad777015235498b25682192fd4324e0da7701da24b703405f1616c7380c6823b24dbc9865e4845595ea79f6239c06dc1db0a42c1b678bcbfcadf427767c238672437342df7710a08b59076c356bd430ab549898bb70ab8802e963fc4b381d6b74f9cc5314602625e33b384a9b0e4f0f4e7c8473db0cecf99b10addba7b1704a0af7e8d31adcfc76dc1b1f20b15d92a8aabef814484418a449ec8583394406d472ebe79768fecd90ef72268c0026a8fcd8cf6ac1d1c4adaf7a58dcf2b522c85ec161b6c5ff6fb8ec6fa59bdd14207fe33c20205caeb2dad7c2c34cc5c8a4a2555f6196301d136b8fc4998463a26b6711d5fccc90fc30bab5ae7b4df5187e9c8a8000937a083263aa32e3bea36d01941f584436827b18e379c09f8cc95dfc891803378ace23cf462966c37019cc4dc82c5cfcdab89f56db62360ea61fbd7bc9be74c8ff7e672c0fe63e3619ecc2e469215c30ae926f867e3e5bb99eb0f8ee57561c09c5fc0321b25f54adf4d987fd73bee866b713d1c865090ca0dece63bfd369490f28b892761650406cad9e97b831c8ceb92b99dc31568b7ed29d797e341ed16ef69b48eac72143a9ef5f4f68bdb84c5f6b64d77f2fe910d4148987c8556a8e322e743b111b0741e374f9865c3f7852f8ce65969693a7fb0737992b291e06a23a08e42303a0d7891c38cdec27b101759de89d305295381c40ee7cc4051874f361218a582bd9d340f8cd99b488bf3815917fb54d781a4aa615cabca3c5c12fcaa40fa772cee417af890874e022177bd0e3374347721d6424b19409490522da70b79aa033fee4cae804e3f19dfeaeee2720ecdf672c1bb48c6f4d06ee4430f5e2ea7e093e0609b9b8386fade40131cc247b01dcad9e1f17ac2ac3a4a485550d07d889bfb8d7128158d8ee929422f7850a41964e2e9e6d45444705a27609ed71d2acf33b4e4b167d3d5e7182a82139bb789d3c8a2e582066253dd42e163d3ec7b32d6d6135a4f973129b4762f0787cf0bb2929a07a3e5a7a3c93cba1468a565fb821b43772a47fcdfc60b3260f8dd51a302462af968ef6811cd719858af285f4ee458927cb7b2d83be9ec0d610f3b6bdd068d506377da78b4275ffd42958aee97a4a4ed6b86ab01ed79295723f3dc8d51e20011cedceca50efa80b0866a7afacbd191e41a16b3274bd84ba010176421b19e54025e016d42bb520b395898a5d76a42588a638795c1e0a8dee202e35ad20602c3c652972b58a4ec5c4bd7742f3d37f0cbe89d65b9339c6283633ca945d769eba9fe9d35ce40289a99261228b9c46134b3afbe26a3cebebc04c942fececc4022acd2e0dc2f778603d96ff1c5abf10b12439bf1357c2ae9f539b608f347ffd8cb06fa21204a16a27a731dcb4d98398eb4cb00c58a799012805b584d21272380a529439e147db6dcc68dadaad0d6f06a504df9f4198f8dbe5e26fec7fb7b1d9272054b72a8a8d68502e95a78982c95b1b7e1752d6726268c79556a33d9dca044a19249b16877ae88bfde9a130bfed8cc233a5df4a02a05f07e88614aa89321564900a3c8b1e158a74f3c5ac49ba6ed7f8ccb5895b463fb5d2abbab3aad84a46ff402754b26be2219053a63bfc0b6e0cc6e61cd330f3798ac81c9c57789dc0aa6ae71d80fcdcb3f7ce39a7f2aa4825bf26c15481ce1b1cccc0fc8623f1e44752a61cc2d7d6c9f00e838950864de54495767017c765f60c9637abad329852944f535f594a7c1973a597dae0b2c8a432767f57a14fce8a6da0d54d555c082c09f3f0d415a3eb0c418f4010acdb0eac24c97ccfa95daa383b7884d3f23ab9577efd3d84de288284e35f13ad02f6646775e6d6c3fa408008667671828465b8a6e5e58d2298057082531feb3fcb0c53b2f8a9746f875737edaf52d9d75f10688f864291d000782e7c4252e4e92413fcebeba95a5a2a9bbaea5944b06b906af72d813e335f51186f96c61fe70f306ee8d7593d9babc33616b817a947fbef2ca0d01c7b47b453ac2182349eb31be239865cf1c6cc887fc6cbc1c55c8e0b6713399c76f42d7053b1bf730b91a483321244e17a647f995af0d5502b73fbfea34ae060987f0e1ddde09c6b95df76ec56d3bb23cfb0bf4734aec2de770688cba41d27820ab0159e41f240398d6f300d995377dd559bc4d1166c3c936ef48e9ca52c40f68386ce0bb2995a9fa338fd9da807850b9a4beae1213e5fb4ec26fec18f269c11a5e35dc68c857b2f256b2973b64914c77afe1b12979ced3c8b272881935c3d37a6218a1e49782638afe591db2b91d5dc4dfafc6380585be00dcb4a38c53ed86ec882bbee5a905dd874e1a0159b7716826a648c5b7ae098e7e9e263705f64d29b9debf8eb98c7ab57c8663f74357f5eb588823753f9b3a250e35222efea78230d7b971cc92366b00ff786667ed2e33200e3d402d6574e44cd9e94eb92a70732c3bc945b8db0cc9e21cfdbe0622863e7a8ae50fe82ede2a668ba56cf0b8256b5f71419c89940013e27159f90d40ebe2b509cbb690f9d020d1ce57820605d87989d268d9859d8c93d23d0e31f7c138712ab06828c1ff76d003404578e45f3b6855d883608dd804adfdb99aa05b73af6d7f5bf15871d2d38adb8caa61f0ff40664062c4469516e1f2da6a7ab720dcb1f9b5b9e2e03c440aa7a4e1a3abc61990c248e41a7518a8bb031990ae9d33cb6e0449d859318240c5d49095bb81de6d0fb1744fdaa09e00d91d81108ebb215da9e742a0d6453926a464e6784016557b14081236717a9572772556ae206bbdb867e5f16534b436f2b51b7c973878c948f118d54cec619e3e03dbe09d3c62339ffb2009a411d4ca07f6e2a8d9a32a642d058360a728b375762abccae602b3e5e4040c4ae2ccd9ea90def0eb8229d4c80997b06baaa3a581d79994a1d9f848830c60c9c07a6fbe2760d34bd802a997cd05c0ef4d797a102bc643d08bb4642dd80b65e9adb6951bf89a2f1dc3655887e6df6f86f6d2c1824b2d63de90ac462f23fcabfaa5c8137375cf4066de9cbf719fc27b1bbc6340bff37a417b807d86c6809e22e4123af2e8f12fceb220b0901b2d0f2ad3ed05466afb8e3a810fdf08e5af81e4bc61610fad4272f79c516ac9554e26d400aa0f207b907b762b8243686ad67d749fa8c310baf02b87c1073ff86cc9df8837910107c4dd68f8580459bd20fbc96a5eff11c1210f99430c6c72c2f6927799eeaded94963f81c442955fb0b00a5d39d960e43f95bafa862584d189442cd8e775741fc8e9977b9ec50f66c0cfdb019a238bbc830646b1b2892c52d0dd6b057948b113be420e347842ae9603118c0284882770781a9422ac66d4600f2bf06cbdd6fad3504c1ec809c007182e24898a1a8e9528ab9a0ff75ed265b0dd90e7ecc86488e71375015ced5e43f220b6fba7b964cda631494d5eb14f4d8164826989b3fd75ac8bbe645d6f1444000ab52c9d6289f06247a43e3e44d0ec5420fd138bf3d6af2422b4be5f477c5f1365c9e3cda8eb246956b8e2a8b310299d6b0fd1b406adb0d0ba00a6ee65040d2ec5c8e671805407cac8607a45a159f61e8f04fd991ff03f5123b11e4200d6a24730abad6906f628c51fa5440e755d6723ee0b8008100509dde1adcce19c9650ec92a1bfd6d80fe7d0a8b5480d4d1b56fb8e514e048f1b1fe58e74b5043947d3cf534b8b97a59a30767b185c17702357cf6e122f1e99a999d555536caed7f153b1b951010f5c2b993417581972c07566abb94506640af81ff2198c7282059626ebfccfd4f271a512158d24be9ec1251fa85a4c7d3dbc837ed0748321900397d85dbef815d005cd78357e5a433dff9d7d89947262deb0252508b909688fe3efb8e939c016694458a2cb302de7030ff434d24f0f24ffe765c9d55744692f5e3dfc1bfa3b6988d4ae1ed36ad3a4cfb9a2b8b14d27c1c75fa3f685a600cedf78f21fa9fe3d5577bbf8c9f3e8283f80d5b593910abd9ca3d565011573563665cd3a32e1ca583c69b3dab7b4db157200df7e4c60f909b0db42ac6bae0575890bd2799bc459be3bc85c507d78c2282d4605b7ddc682a2d2bce077b909432e07abea615932bb3e6c5ad335d14c5d70fbf754d37b21d790ce308bcd2d226ddcea54863513faf120b1adbe865ee0f456b8ecbeea55226d0cc75fc7078d610e2d27126543864e2557acd5cbe6a7457c447fdb87f4d5571fce546d809797352206c88cdfd162ac301a02d0c56697a108a3de35d9e49b24e21716280c596f0ad6d5c278759bc9633ad7e14b7a3d9d5ef3314bed921dd57ffedfaa6fabc0c84bc49226bd257e09929c07e4db53a9844cb37f6b0bb280302e80c665595f7c72badefc99f87670b6f5324e5f17eb8d598779f038a5ceebb16982abd9a225752e47e2f3349dbb3e2e1b525d1e4272d0a9c9f59fcf045bb7b7f6e40b916e3f2a793fa441b466f5f903bbd122ea6276070a4c7c7c4afa40486ad4f01715601d6a745a682aed2e39ddc27dc5432d951f97ca3d138ce4f7323cef77b59f71060efcb0da097eaba218523067dc58458ad9030b530c622251b7ad35b5b27b42e73374ae51b6b4c12b2d8cb54901365e72be5a5a2308c18771ca32954cc415b93f59b3d7d644fc6ac8101a723b114bef322b8dbe7f864dcf2daa708a151f2584eb2d1b0a05d8344c71e0694991326b188cbad7e1499609f62ea7ce7cdc63368c2c51584a87cc64b3db5a4cc4cc0b1b6e7bce2780332bb4ea24503fbd6d1fe17c83ff380a8390d5e9bcd7b7038a61f75686a8058640f08301f881764249320acb946cb93271ba6e47df577fb4568d3596bd01964b081bad870eb323fe042e1312371d43204351dffbde4c47d6a68bea2eaf339370428a3ea8c3de0c250acfb0162bbb20f17ad5a7dce7bc0df3abfdd499f1854471a13804e1d116ce7359cb19a8536f7831c87308349488a00646ec65fc60f8b419fe547cc09197b7df64051ef60f8ef6081df6a53fa8cd89578e7f3cca0d9ebc7aeb269c0b9570d905fcc81086946121c74cc6c1d95d3d60a86068ff118bf8624884004de61aadbe0f50c7cfb4a947bdad65406e03b5e6978e95a66673c41c726ab65437a2eb40790d91d64f75708fd4015741be3b088fc67113fdfdaa91d7c9cf818db8ca9e78eeafda000acfc06cf92a9134a9d926ca99aae43dcc361c4d17eb61e58491b99068f0fc1169f425b5539625a2f6700c20ee75ab5d95cb51ee96380073caebcb290a805867e53d97322d2a6fa2aef7e3123fad19ad3284fd6a34a8460f87cbe0bde4f18bdbf40c4f140c70bd7bccfc362eaef7b72619d8f7f747b16022c481441b35ab46fc11e75da433c8a19dcdd85eee2f3295940aac011de4c60e00aa990c75ce831a2960b5cea4f3fb869b5fb65f1c3fcd38ddd40fa5e14d11af4f3bde947315c515e929b23f11c612649dc8bc4b729b89d69a3bc2c2afc30a6d372f279aef9ff65d1b947d9af4cbc2ba8ae8cd3ab5b189d52e16520680af2692e1bd25303a709d9a7a40eb3537c40177eafd6ba9e184f47404db4dc186019e46e12e9d84d07d5313363e09421dc6a786d62d98bf9d443feeed4f8c51aad9fa5aa0c27cbab79db564cf16ba7bdafb13d2602f914dea2245a2f89e132f27f0a750d2732518b0a802e2a664bfb6beea25de56fc4945cf0401616fdd866fe91c2677f0ed9d37a58d6e2a4c312ca34baa2c2d27ae07f9f9ba3de29b2ea3d0c56d6d833a5453859e43ce96c24b1868e75dd67c0541503ed38ae81bb721d5aa968a88cb2797cac8b63464274b945c0a0c96dd3ad5fc4f2468e60af2cd570196f8340f9af1f302a9aca64543a62981b763e706d1df893875c6161d48916a4ef9c5a6ad492953c3db80e86762539f24761603b49bb9d2b00c435adcac09c80976a2f256744207d2398f7ee7223fccd6690f1822726e10c3c682e2506cd329bdd495a0fd1d1cd90e7e1fcb7ec4d969540a4d8b19ecd802728cb9e213171a41ba1b95c26a0b951ab2cf19cd3aa898847d435f3be8908a5f254c251a03eeb0908b12340985bd0f8045710ba6a13fae206f9b5aa172ddab80fc14a0141f677fe4ade03063b0064b8507106ea665dfd73f93e3a5c834796699ed4e3aa75fa6c4fbec2291f7809dc5546cb6f0ffb8eae8a98b91409c4d2a697a5d2c3747f666a98259800077223b1f49631bafc3952fb38d32792b4230aec75c7052da9e99ee419b60dde38f9af25b707024b58a508a14a7ab59782e74043dbddbcb754dc0cc83df211de47e27a9d7cc80b040cf0894fb9ba4194ae8474b48d54ae6f4f284d382377e083d2f2eb12dfd6c5c19786aa0636a9fe9b18fa4aef2a4ca3010669f75cc5b54ed6b90aa8d2bc1d57c0cc8d0c6a9f47a3e0d884757cf0536325ae5217d1b2beefdb447d3489fddcd5c2d0b208dbbbbdf722d16c62bb1d579b3c46784787180eccd68f6e6aae75344af088b9021b016018d7c1efdab3f9824803fc70650158154943c0775a964a45e7c06cacfdba4918bfacf66bc041a49eea9663bd641b06b36045ba0a9ac30398b739b13c5d4b1a5e189b1de9a9fde33909fbc89f61b804fd3025a8c8465cf71700f96e75a8078f836c914033d5600b7c56d333910016e3082233cce7f0348ff3acf1fe0d661ae027abd9fe6b26458bbf3f714a179dab30c4c6e1526003338ad2aff91f82f1267c4610401f6a4a6b65df362df9a04b457abd9e4c1cd5af252f7eee1d95d24c6d8ccb4e6e7d515ce3bd445ed5f2fdeba513aa2761cb37028a115b7a6339ccc5085b875d06f6bdcf7c7d4f2fad4be7a0ded3a7bf33a3c96c5132205eba360884e6872daba21995e5e496fd7c9d63fa9c95b136a53a319ec23dc703123ba83ceee5a366ccb7fa9e0ada27ad4656ab058c58a419f0ecb6a06b0fa404a63854f1e051efc58d8953307dccac0a45531ad4db0e03c957c6283626bad0b4143d24e2580915ff069a87cee67cfd87b39ebea4a665e6c1fc6d5d812f887a2ded5df1423b6f931de3d7150d2179dd8a7db695de5b780dfa95bf440c07d955b06625404b5b79ca954124aa16b06ba71540c2c5754f1f08687a07583d364fefba4861ed668485c487049bb39036bba4a335c452374260453a6c68cfcb41671afbbba362e7b98ae2c701fa4002f3f67526ff55af8cdcdf9c4a5ba770d55831173fef2a77c307e403dfbc5716e9d04d18871c78e0fcae62131ec5fbe6d9f3d5e8cecec1fcd86a95629158442f33e59bba710e8e9e3e714ca96f0629ead361c3068ce5f41091fb185c618d9121320bd3946ee0a5870a06c8615318adacb33da707a55b9e254cb5e4beeb993a18d2da3ed1f7479a54c929f774c45d9a304a160d36e205de319433e3affa01d1568d17581c448c3b07ec0d8135d45f8f2656dc718010103732b633a610b0814827c4c0a54ce4056a3c7b4ca2516030fa3e8e802959b988b5e6f3dee73dcfdf5904bb5e9495fb42f957b64b0200921f0a82d02df78507de623c9271a39490c8f61d77b78b4fdee8a780ca71ac05ecbd605afb0ce5d29972b2119a80dbf52bb261df0c492b11652a799c990cb483226dc12ce44fc039ed30bdb208117d485f34fbcbbc6d796db443bf79b712d15b636d188493a31c27bfb6ab7d0e3a91d5211231bea7bc53495f206674faa12784fc5a961579925a9d864373595d336faf735b63ce26737b5dbca9ab0286166a7a0f607fa9b28208074f1a6bdf6a5ea300a4bde4de64e436b3b251cf9165c8555b8ab1dcc51928ed6785aa3a9801ede02a73b3658bc247413bb9fe4eb222e3a4dd4b6361579cf193486cd7a1c9935c4268dd781edee3756e8d9c5155db76fe3654bfad2f9de4be62dd68a78083f9d54b8b1bd7e04ff575c6fe1d1a227496afaf0e5ddcddaa834427b845e9ba6585f8bbd0b8b3a27f51f35a80bd07a1ef2203f8ed5c3a29aa5955cd6f05b60c87cc5c22051a8e902ca61548dd4abec124cd7fd9319729a5a3b0a2350f21576cfadec20bc106d8df0e49f26e88b8629ef71f69068a87ca808427efe34b21df335a2b4d2928bdbdbd99dc0e36966e6529f69e7a06b54d6dd6845b160211da188773b0f071cd6ab28bdd927db3bd1ac39ab0f2b03e8cd987be6c13da36ed21c0a30250655612d3c3cf5f55a85a4bd855997d1d3ae26e83545f5714625c984e1071d48ce1866afa44d67d5f1e7f942ddf58ad9cade6ba7c605947b91af640a468e82e3891ef76c39f45477076edd51380091d8f3bad4b77bc4c325b062008d627cf34a03e690c5eb3be8c5b15e8d699439fe238f3ca4b7639e02a356e59f5cb6e54211c0516a309bb7cef0e8ddafdd19bad4ff69bc3a61675bf963895c6e691b353261ac155ad49843fc1bf94d5440abc55ac10b5939e127a95bdb8f55190415253ea5b7b5d6615d7a1233b9473924749954e38cda14f4fb6288ebfae012efd72fdb4156957d805f46f8891beb00570b7deac9e7eb5a9b2f47c0250e5e21c47f2ae0da96e100d29061d5d1767a65f3a88648263e541d793edbb05a6329a508633c71613a7025b81687227f938fbe9f08354a565fcb385026c6ac19ebdf492a13d6371055e93818a63010fcdb93da391c6a62e352d2acae001b3cf49fd45ca2c3fb417afa547daf188a11263b95024f42898cb4916319bc6200f469f4d992b0196afbd37b7e94271057207710e9ddfbc45b3e7849670ce089f0d2a1c8f6381e5dc3894deea228c708bb4562b7e0ae94d29c76bd996d1e69aee991eff8a57ee728fd7d72eeed978040fbc8c4de43e22fe6d9e4c91b00f27bfdb459f867a8d25ae568e754a8961efe667f206937da5f76d730cbf63c6b893a1d0fc5a453ac7dc2759e3f2d8759d64056b9bcedb0fd175620fff693adc52b10095a960db414dd5cb31218f48959b453efb5fd107f72eb6e50ac07bf4fc6f32d0b8592b8bd151203293c8cca39c92a64892158428203c39275259696b63555cfadcfe52717b24b33f7494a3fd3493befa88b43ba71752ccf0828f35ce79d848ef29d39be1cc037205dd5f25e92a2640d51aadfb70d0215a904381b716a54b32937176e3432ab90ca1949610b09dc6060914219cf855e61dc2e507dd6f035ee23e20cab5e1c3b401a8d16134ad1c54b42515dd8ed378957ea6da9e2e5a49c6dee4cfc5f5047d05bd40c2a485427f5863212ca797300d6da3086f59b4a53c744071926c37754914480e8652a3760fd209d365eec9f027e1d76bf3a4fb4ac893a4eb869a868337a6a9c7c74f270fa353a71abc1d4f648e5209e1adf90169d3bb22695e277e2c3005386ac63eed27e458443fdb58a047002edb87c20e9d8f2cddd02d83af2896a3694f0893129e342d95f7274f11578bfb3995913aac4462615df8f7770eb8308f292898b4bb1f5fc113ee1fbe455e4382a7cd572d7d59f1fbc0ca1ca520d936b8530e191556b39d3a88fa389747ff59360d23254659179b157e904d3a7086e29d01e67619a1a8c50794281ff516d47f51f03912b671a5de98fe9ce6b24a9f67f910b19ee6a72434e7cc1b7706b3583e160c2199a956f6c3417516881737b748c8b999d3cdb93ae0620b75f1f8376e8bbb81d650dbaf5a34bf999a7a7cc09bb8d29b26526da365ef0ed5dd9eb26083086f446401201e03389206f7d7479f6166be6d4528639fd6f75976f511c69c50f11ef2baf2e628f18b39d20a016751ffc6de311b5edbd59f7dff3e390c6fe222953bd8fe458f42ac8aedb7c75cacd6a339d7403800eab9a205d37a412174aaeec76e493d1fe35cd4b485f8114b9819592a345d36c207d9d7c684dcbb035cf99ff2b84c07af6b3b83d44ea97556bd531bcb2a8d03e4a83c9c3492707bfd75dd0767d0d7ab91f019110b3df141917b8755e51e4e45f75106fc604e4a00bf58463761a1ed7d64e28a746201c452f6afa8fd11ee2ce5fba4a30eaa416f79d3473512c64ca4d05f4ac38e460854fd6596c869d8f94f81cd0d2baa29e37b750a5bcbcfedc42119f8a0c4f2aadf542a87756f576a40679434a5c272d573f327a2e381d91f7486c14f5fb55cf52e801649953d6952458b8984f9b5d908b7cb96cee3568eaead7bb373b0f678e2f2a1131aad8f5e952337719dacb9c5a04e6a8a995dac26568516a3e9d0a3b76efd4a5838ffe07bdc896a54145992b821502c59fbb5c092aa0a0d044a012087ac79dab29a6c0c2eed2e9e1ce6ab0396acd180f68bcff54d3cb054e5ee116ff584507b1d5c183f25a723d8fc6895a8a03b647a8a8bac3c3ed7978d96411e5e4fd488a64c09bc4cb8b069e352de07b09a73e8607a4c19496c068703a22ed82b8cb711e97626932f52f64b0c47724dc64f95d1a20b6690b9c7e845847eb9e9bc350e0f5b7f84672360ba3fb6490e070109d23f3dff07b0514da29040a4e491c871f7a6039fd85bd352c55c916bb1fddb037cb45be6bf2aa252d3c0ff68c4b8fb41e3dc7965346e76c426c205d9c9d64356666f70d75b158828f2464821c55d4a7dc41d3938c5a0b36fb3f7447ed36fc235f94c78a0d3e41b7d91920a8dc0030cb01ec75bf791c1dab6ea390a8b19e17338d46d5e44e6a04ed06f577a4af3c59726cd3e07b13e01225ffd24147563caaf7d559f0cef117b55887cdc0a3b8db8fd91d7b7e296e69b0436b2c221d84a4e42f57b1f958d4fba715d70633156fc4207ad6c95b637d20b8459785904661cffaf360688fc6d6c3972e812db9bd0e1d877651281aeb0e386c9dbd5e45ee4b573c5052890fad8871475c229c4ccd4e0576a4d40c5f81532a059115bcb7079d7d834c03235225b5187021b919e58f7f7305f4ac651c6d10627a969e036790a01d963a334a7086a2b51e4e171de2a86b778d771ac1d5fd7ac6307c9e938beea52432330004c7dc99c24acf4ae8438bccf56b8b103ef2e965b4d63c610bd0b143829ab48d32206cf1db29095a367ffd00d8d292cfab4dfb402162e57e9b925ef120686c3b93d6f78e58152200220aaa8d40bbf1d9a6167a37cad0a2811321ccf90183387d1012339966495d33243b573aa5882446582ade7cd867bb747ebac137e68a54e7a19531a593b025fe5a23fb18c295b3b0f8330228ee89fb96366d85ca94930f2dbc29c8645ba9efd3d2f2b3f801b3b66d79f1709aeb6438c8f091c726a788f5942af37bb16b3ac532e7fd58a4eadfbcd5e9993c8e20b990c2ddfb53195ca636da072b72d59fcfcfccfa423f08f72d32eb5145c61095e06d995ba11afe1c45df81bf772d7c863a1524da34451184836cf24bbaf34a6b20024c41c43cbc4179e34d028e346861a5b354524d2b9781b216e4c70d87b43cffd9b891fe666ed59a7be468c43cd9ca948fe27d21d97b74b832a8557fc0923e9d71f508578f1ad5f02165915e7882b74629fd9d76232c2cf1be7e507a521d93d2c92168ebb1fa9ba3d373fdcd9049c0060ab79e00d47ce35c92ee1d34960f280af2de333d4a591ce7c96429fcba6e1d5f4ffd294342dd1a161421b27c3efb92a09e18783b15e7a10b38d55c671a6c15bc7204ed33aaa64c14330de18e04ea8078648bba82239f1933208b88f9f4268943b3a01fc2e300bda44c2092e38095e54c718f65a54bb506db07925ecb044f4c2e5cc38fc7f205921e87508b23ebf03cf1271efdf0630d18420ea084382a620f21cc2406f6620640b475b5a08aad2e29cf8ee7dbeb4e9c68f8b065e186f2713868b1c57d96e835cc86ea6f5ff5f9ed20e95636df6ee9c39e92222b49bb8d478d0ec09c0be0bb3a8ab34a01c00d3d2bbeee20aea095d9e6110ee9febca68adf2e3ae7ae7da1dd0f78b7947a54af23933651d16a7fbde05fa065ecff6dd28297fa097e999f6b5a8c2e4b24dd46df546eecbbab9054e004433c8273ab85f88faf2ef7361d2455ffea09b0da0cb3ddf6dba6fe1f86dede08de106a3154aa4b3f06f4603730b12530c676cad82825fd9bff9a7db81926688926053a8384aaaad2239bfec4e640d98bef93a2e0084518d508806923437965bd2c3fe257333c5de4cdebe9bcf2c077518446723670a1b43fa2b302363273aa21f773c492962401584044b5b8de66405fbd482fd74aa7bc8c81c8cc2cb63ce84fd5cbe3bf03a9c4a4e2f27522be84abd10a03270cd59c0fb1e4b378b1437caff936be10224fb6ddc3957412ffdbf122ba8f04987e80e3e2e07645954b5c5fe9ac30eb3f83064c29593ddce7f515848e96e16ee350638216c8ec9e6e07ed8fc09b720df15446923e82dfd8a4fdda3276e86e15b473067c0e240e41e5efd515b52c3ee8834e4a59ec6f4990bcdc70f273f511814e81009f452a8b62c9398cece2bb10311b842f6d5b66c5bf3c5fbd9fd4724437eadc94a4d95b50a8b199fe46e4f82158deafd3ad354cd8d3c9b138c4183627cbded52c063dbfe7d6b97a999fbecfc7045da60260d8d7b5d58320d8653366d6786fa8e02e701e787ca3fc58ba645aba31e77bcda14cd66f2acccbafbbd631317eabd152320eb3a96a1598f2e533522ea7627cd62a589e09e838eccbbb8c6df83601fc90e55142df6f541f7a25bac0c0e31efe3618e6ed4f59172d3fc32363ac26d05ab79f44386fcf76ea33860f688c02ea4b20d4ba86800cdad4973a01b72f35eb7060e88c25b61652175e98ee883359e2327cf7f65513b525694423fcad1aa9daf55ad44fc2e81a68e658eddf869230cd89327bc4e9be4f7bd8210b97fcc82f98df5c22696a543735bd769b905ecdada3df9181ee2f5db82d3ea76c34f6b407faa1b79fde9804796e1630e13e9cb705a4146d102c47de6fc6ecad63526e2683dd6da75710868f1a069ae692f29ec95f5c360f376a676d336b30ca5b63ae6031322e1ca94a6b16d7bf1a1880bbb0288f9dcab08030608335b35f8cb0af51200cf575730c7b1b8e3aa3a857f911215c05318033b872cf5e17713731e912daca13eb50761cf02f720af78b45e38e09184aeebe69aafd153782f34317c88df357c54d189b825ef0848bd58ce21e64065712a9c66ec4f4c91927dec7700b7ef05eb2ebfc7cf7f5252f726f8011aff257fe920866c6c8b46acbed99aa47aa62d5161ff880a88258490662bc422ebab793c564689231e90bbca39a8a8a228eb319224dd56487a8d3a5a9b1f884ce4af6a6fabeb008d2d943c9c2862ae3ba0a7ee0185b603d9b6efc09a28d885fd32d73f45b9347f397fe70aaf1d6951d7972a2029b5545e857b93e9834f16eb95e1f7965aca53f47a43bc50a5f59d4e090edb556a99bcd3976511bdb1843cd29f858384e9b21c64629460f5b2300e56a83f4aa78c45bf6a0e12b2d18ef0479019934f955f1c361029783e1cc9272626180ce24065574d8cf3c1b5c8285762193374ee212bccca095d9463f36eb3cb6698dfabefbd50e819d2372a9fb3e78d668d30a3796baf222ffef459e1607d4b01a790926798aee65eed8a391a3d4e06170f6bfbda23edc41e69dd1b5ff9f72bc2236a250171f7ec22da3ca490ecf886bdf995899742fbddbb326dc3db2aebd38cae2e8ab71df8052a26df0068692e8931e4e93f6fb2fceeb2454aa284a41b9c355d5fe669b446e098a24d847f9482a92ea72023cf4a01e3abc87b5d9fbad6ecc734432986af82145ea2fcee534620b63417aae7dc7e8b4ac07f5b8d7cb0a8d41c7d7c4fee858c439edaa312177d4748dbcb1892db8f1d098b8627941daaa00b6c8466d13285bfb467897995f589a14d50826a4d4c7cc029476edebe48f57546ea2df83d597af727895601e3f93ed6425d74d3b2c253f9ff1db194b3e5d6e570a30ae6047fc96e5af14f0b47ce9c86addd38afc60421f7ce4376bced264edc3cb4f4445db30867f63f9f3883ce09f57a31dd1734c8d87ee312285c579091f05d6ab42102a7f4dc1dd6475edc3c49f5d10719c0761595f80a79dd1d352d4a11d81f33a7579726188d616a3f80eb84b1f501abafb08d361a7b2380982dfaadefde878dfa85301400583e827912beba7cd1f0fd68ba342d933eb2983102686a0625e1a04d35978407abff1aa448d6fb4265b3d7b129f8bdf3fc8522834aa27c8026b1f66fd409397d8f9443b9d184a81c3903cd30fec013e484a4157267be93974486e7f5a2ab1333eb3c4492047638aae44eeb52942404630a3da541d555e5473fcaea71bf806ab9ee247a91ccf18dbac6e10c40172eb4f17dc66d3e15f7f2f52a17d4c42c6e93df61578319db754f79216861f84fa9e83fe972bac1f26ab3d649023fbb8db64fe6877eea2478e9d2a8b3352247240bb14e4c882d7a533c7f552161a1af7df16f7ca50fad7a6f5d451333e7ed36ef7a4eb615e0c6623f3c234c67c7cf82ce7872b63590dc532ca1dbbe31bc5c28bcf82a203ea94cd2c39d87588db164b01bcd65b735b4773e051e3e4387ffbb03f1cd408db01a58978f9ee3e2e0060a57dd18d14f3b6328d9058600ed9584efc2973fe0bab617616609a36285d5f6591643465492f827ff8edc90c205bf7ada629662864d2ce036e681487f35d019326cecdbd2d851ded6d9cd16eb7d559456759b0c7037ca301f4e213ab56fe2bc93457352931d686186dca36ce1c4862a84e1316cbb8fd11485ba13a453f9e55af5e1c8658620911988cd15c8aa608f672bee280cbf8d81c4f4f2b9bc0e57e3b50b6df2488143a207fe7665845d6c539514fd4a0cb37d70eebcd18e0a4818927757633dbb459a734cffc5ec9a98123528bac954d4154d4b05e0d6d5a8c9d0f844529821d34b249a0df0cdaf7b8ea4a34403a2b445a1f47df1ffda64297f9dc7196585d32e84ee50488033dc1f5d2f06526065a28a38129b641c0fb3a47bf03586f4d8eb9d62c08eb14d9b3386d5f88a92ac4b5a99b09d7a6cdadce415419b09d7332fdd1415c0941591ee16d9d2bf8118a56323251fcd67f56c0012848e0fa10bd00f6836e6eda6f4b8d8d04704dce7181c98fc33d6edb51e55ef17a190f9abf6be10be684bdadeac26a8857b0cbfdeaeb7ca4dac8ba30d1e3dbbf40c2b99b5dcb2a73becd5f4a87c3a3ca4bd5cc7980cf0e1d243f2c2ef35dda2875646637fb92ff70d01bc7e259918da345943e88a5cf30d30aca99f334d3706f74b55ed673f8039af5af42d0f2245a6488739b4b4153499428f1028ecfc601daf8452f5173c1b48cb609e75338dfdd79a8bc10228f451cd02d096ccf3c3efd7804a8bccbc4c78eb95af83b4f4d0c35965117ab65b137ce5f3dcb1616b015a109c1b821baba9475f47dbdae885d0871f232c960e0a2325b00870f52f995d080fc8a497cd6bbc03064cbf3a3bff69f5f9f9b1217bd8a3f19755df8509b3679f2f8e9c77629ec2ff7f7fdea14b5f3d546e8436f12b8d2e0d7517994e1d8e239b6dcd5b3fe14a67714a7b0fa7350048bc619cbb6e493c6aa9ae137bd8a468318203e9e42610537ff1360b1f22c6b390e94b593b60466faca7173a597e6ff1c89e721d077eca2b57c5c6c44523ae7684b691ba21a3f5f8710870618efb12392459de0ee8a7c647ee2ad5a304770521c3e20bf1c382765756fdb99fe7f6ee45813d80a0ef808436451fec7872b158f57e649cc30b4b2d57f44e925f65d498c75426932942b72147a43845566960955b778cbb44ad457dc09878092d1b514a3857e65d7282a871676b4168ddb5adc0b9381b0c921b44c7149a45e0e543d7e409713e3176b011cfa309a4e8a76f63b24c8a12a59ca45f8faa2c878d7defc56a9589042dff7fac591605a30c897829d42293f5b6c3225eb162f09a928009687cbdc3b4b69a4d1bc3599fef2d853c2899acbfe9b25c2987c24abcddf111063bc0d7f0d6252604a088086951ff459d1de09e198d735c8e2985ca60d98deefe4b6169ab24e0bef0ed486f2ed1347689a25e28369c56dabf8bfcb0a7bec50f9bebf10b2ce4efa2bbcbf1eee03ce44ff1547a6751ef904fdce3b0057c4bf177b5df6a3582923030d9330c2a2c8857bf64398de4d2995622795edc8ab2c8264b2cf0792de5e04971e62870658d0f6d50d8e6b3030af5041386b627bae1d32c6c1e36efcc73473803c4fbb6874517f8cb941d7c135f4917d933e7c1201de12c2e0a574bdd1f847868486ee2c3e03c921b87510b515022238c92dd361970267d53993d264bc2b470e28f9c8c4ef3a2c8078612efc208ec2154d2d1a6d1a7b2df41d95196d085cf48bb56b2b4589253c7fcf43eecd39ba2f96dde01dfd900b8ae5439984d9ee027ab3693618d43230f87db83b7bd131151fdce69966f16c1d48a7a6fa6c303d02ab59cd732f12691f6e3a7a7cda8b86bc210b9a338996b33dc639599d7859c261e286025ccb1c824fa3e75c5ad06c5f1bd7c21fa06d687db2b563a1abbfc7aa470e26f5bbfda87345d7907ca458baa0ff446b0e0944d5454384ec29b8768bc980d24cc7040086b2f3a689da364e4e646891213311296a01ea06176ded3c1ee02a1eb7b6d95e6ee199f16ca2baa87658b92fe051fbd5d0935dff51cc8284a163f71577e42fbd82a064dfd5477ff198c8aaf11f50b8a2cb5e148b1a2d6f7df9f2b43e63b3af5e942ff5a16c3de5c3a0375168ce2a8ba04ee0d38955b08b60b32517db99f932938feeb5923baaff3fb46a4037722227d673eda13f5315ee23ada2cacdda61ffd6e542d3ac0dcd0cb14d72792ec1200b37e1d815eca49577a75d014f38b0869e6232b1114d85d577f2c773c3d9f96e3dbbc52af7509891a360719af3efdef0dda0497d76b1ad31d3883caedf931f19bcf2fd69c8f4d4f84a55e494c3f98225d4f2f168b03d4b14fa4148a1652ea9b8e69dc0d46ab16a51941579a496599f8e543458af7f6be99aa8352852952a6a8c60b47d1cfa0e1ed8c113804d41a4377ffb62ba54ecd52f5790b6331756e35cf77988aab81400777981f31a17e8d2ca8d7e76ebe5a73cac7367f808be1d9fdab8c4241b21e1b2586b2af9ca1704c9db3a229386f0e183c70cadab743c1bf82e304938f1bc074b1a731da22f43fbb5ab4e3ed00d86f0a30aa80cac0b1a21bf5d490d50f0a41bfaf366ceacf587baeb6521771ae5f9e4cd0b579ade7d728db2ef27124d20626b61a76787076db13fba4ed0a48d5bb5c740cf66ec3bcc4acf9710959ac620cafbb85598b761d70c81e9fa6c845a1c45fd9b97d124773530bd162b429f7f28b11b889fbf27bef5736df1c3c998760910f6d7eb09686c0496f401a5b2350cf176dc3af7b14b232ad686ebfe6ee19d86e5cbd9301999ec4c63ebe07ccccb73e1333c149caef4d1ea228fc268e27948746eb694e2a6f5629532bc644e2d6bd0e1a5a97da40aa7caf81f16c9ef849c24b5e7122b2f92d3c9407c7cc597a8b7f237a94f8b43d3a496acdc0e4d5764832d7113e950951a47cecb3b2dfab39125c166d3f726a400ddbd57ba754db369ad8a1644ec67496dd0f3dcedb1eba64c31d7284558608c37d765cbb18b0435c1adbbfc7fd1624f13051cb92ac0ded988d7063caa9a762dfa4049e6f0face09e14639a55602c84d96f6e69dbaa2d8a22ecb943e2ea6f1f3d57596a954199f95ed5032c19a08d902b32765314ad3dbd678ac2ed8ef0a56f09800c476428fbb7c0fb701dbaec5340f267b6453ba8fc480fb183b94f73b6f5a4e9de3b7f4144fa860dec8c8eb6743f7d188f5c9f9c9f06add0721308c60363f2248cffb356bd659367a086129ea9b3b8f05e35bf7cf005896611455376ffdfd03b5dd6b5e5597c2e48553fc4307e151180b12351c7b33ddf28be6f4199fb3b65a02cc066e885970decf1d91fba61f1aa0e7d341bdde047295405889ab04e4558cd54bc570a88a19deeb3dc14de2b1d0979dc285b69900750c5b161a5dcd539ac73d6c247cad05129be6363cd482df06d2fd54f88a1dff56aae5c4840cf811aa81f7471aef65bdc0cd428005659d79dc1292a5de7a501f242e3533b3d2854da65e81d3f70c27a9e99cbb2451887673236e20f9fe724b4b7263cce6c2a7e78a9ede525cd5d5a7bfa0f41ad20be2c7dd8adffb8c9a663e4dc120087743735014916907949c96f8ee93a9993590dc816c280182abea635007413d647b50b0ee63620f14e252e9abaa0894cecb9128472449fcf10c09b9526b0cfffe1643e33e2be562a20de8093fd0c352fdbedb46dddd61f76eea2d8f6a41d2b6df9ed5c18f67c85a0abdedb4049b5bb9ceb56c879afb882ad65033247c4635a2b4feb9f825c7a1602e1d25b92fa6d00e97036c13df0dfd4179b6d38ceb1597b7a56b7de29135492fe63f15de0c4cbc25ddc2cf0a7faeac865d41df3a197c1c95970fff63b96b730c144aff563a779cf32073cc108e024e4d6bfe7552850bbfe1fa4eb6b7964a371097b49d9e91dd13c4aac3cf85bc6ad71b1e3e193525922f1eb71de2174c26133dca3f243c12ef0d970d340fa035ba0a10eaa56c22ab0bb9993b942d48343111394d0c1e9e7a5af61d0606bd15dae8fddecacf8db080f0ad62c9075921d686fecc504cb56ca38abc7d67295a95ee72222fe3cedc86f2f215b8a5b78c32d399e94793152a528e38a7684c171b40b8a466312640961c7b93bbf02861553e37bb8525ca1e915fb5998701f8b8bd08b7609753a2387bdd7590e88aebce407f87cd853277538972b0e7aead49e8c9124642f0fca4f5c11bcdead9bed6d3c2a55b7caef7e8284bd55775b693fc48ee1f81ef100e4591b5c417d174c91649fe50b9eee2c3dd877aff248d2215e864e53b4c8f8610f6f1340fec7dbb6cc3facdfaf0958052be914c04c40a7c92c8a067eeb6a92e67c6428a7c9ad3b51126ed2c98e9a87bf85fdd79b8a00167f12ca055c7f5068761fac0afffb36cd187ed3f5d0089dc78499027903d92ff23f6c95baf7c03e3f4d8f95334fa229fac0746d5d0fc131b43e819fe54a5d40ea8fff985990725b8b39db196f001d07968d97db371c792074bb06f4b9471ac8c03d581246b1cfce73a6e3daf1e1ddee7e7865f89968bc957877b4cac8a334a75059db60a85e4b9d83baf6f3833d5dfef9ba930f3cfc369f9134afd60f8ef19aebcc9e681605be432bf04fd49776b5d755196a6c572f50072f460b405752d7f83eab39025fc37ee5e9a2d42b553de95b0254c452aba2d0804f78565882af39eb11090ef79b7f79607f12eb4569d076504aae8dd0c2d9a71910f66b8da513b30c160304278d05c698b3293dd93ee9c8371c3f49556b5022a1217b5821428eaa19d34750ee628b1ff1c007086dd3dcaa7ca8859939d61975714b72028ff8484aefe9f5d6b8fa6ddb8e1669e3f04c2826f97897a346b600dae7a685edc13068ceec8c1bfd3783252a036b17165f54f71f8c2dc96670f543d60af4adb0d3cfc65387609173ecaf63ef7562a5e23a4ce3c64283d0393fa3c531da957a527280e3d682b321df498635b121cfb1a8440121441d913f31c16c92e0ead87d784ccf5e2d3cd7c8e0fabbe2b326a75179968b1e6bc3f6671ced9eb41dee359383a0d3ac7c0efd287c255da0dd2cdba057b85cbf2e15a2bea0fb582abe29cc60223b1619f7557a6325541a64af1087bb5e806562ca67b3b061a334288aaa00343da0d49905587cfbab90a823453d58f2ab4aa382ad7919c5bc236b84e17e8783ed42f06fef875c5539589f76be6bc97948c4498fd1243bde418d74402050075746e06b8deb9b0a1ad85b8de264d36ecb5803cfa03c88e7ca8fdae65bf0e32777be725fbfea87fac6912940bca4459f795a09fce86d863afe1cf150f060c9c7fc57cd1c2b0cf1f980eec9b14f898ef6b77a474ea9a655c5e04dc77c9e8eae346b35c26d7ed854de18dc613cc50e96f3f39826c38d517c79d8b13c524d96d7ee92cfe414cfc57008dcd6a67a5a5b044798a5bd6b302cafe35087c662a14362d35478235ad87b86cd77eb6cf1f5c39aedba0ae7c1c78b3c58f30d45102721f6703aa911675f29b588edb40ba187f0564dee0987d33185486a39713f5c010822f8d41acc328c225fc47490c5645e017930fd340d258e9415f6f7c7671884031224f5e8eb3168d5b7efb813fd2179fd6eee620b4d08a443cd35a72ba6581f1ec6152044fbcab185617971ad7066ecf8a3e3ef039720aae9182380cc99a5ff66870ed904d935410688d71985a845fadb6f3fe6d71e20f8ff87418b5493393f713f45c0781f3d32a12df2864669e56e6efa79d257e360032f125892117be5753c4032a17a91e5b486bb308f69f0f6549a21e1c2e8fcc2ffa421e32944866c1004314937186045f3f70d934e8ae59f80b11e78a4edddd557bbf15e04ddd07cf6178a45adfaecd950c2d503b52f6b9c7b1ca08817ceeef957a09e69a62eb48622c4d162ab4ff8fc9e546a0b23b781a84cf224a846dcb0148d2fc6c9261a506698faede5f1272f735340dda09a1c648f62a35b8cf76491c5d89bf3246a7b4fa4bd61afd585633be47b1d0e98d9ffdd7f7ec9028ce4f0a73e3ba2566dd4d7b8f53f24ad37cc321c9451b2f9df40615a551f699e57f705631e10ed1e7be709e90e6437c5bc58db010f15407eb7907daa968d4faf563788359cdd53e225d7fa571ce1137e1756b19bbaf5f8e7a03fd44a89abe95e834f5180d3cf1111c52da1d313298cf72b5615ac06a6b83a88949ff93bd22c91e959fee4f6b8025f1e6b1b74f75d0f398190efdb3b6a751511af54fc4a808b5eabab43a0af23a8827673568e7bff36b027f0c90715456d0c5d5ec4219247f05ae8e95632c8dbef09c93dcc86cdb6990fbafadb88962d5ce34d822f8898b8933527873ecad056412a4e01c9c28ee1b5cfd979781225f8323214637222f0222e37cfcf5d2e2ab7a5f71fe0798d937b21a0e08b572ae868c0fa421520614155e5bdbc94a7c0055c3d0fd212ad2d78a5ead188998e5ce6676b5f2bc8e3d3cb9cea3e532d812873aa01f9bf28ce07ac8029b58581043fb8680f9fc6f4511945add231e26aa720f90ab179e7e77ee7987aadb800ecfb7a40f9445ec5a71016fa1a9cb07e210332457e1184a5f7b28728d92012d85c3a8708e8b2fcf14402a7ac3e6641503ac63fd1f643516b02e88075de104f50f12e3590ce492bbe24099ff7a67d07bbdfabfb266c53930522e9d3eca5e3b3aa49dab9846140c68c7959dccd34658232394143b4f8a8206a51c68be0c03b5b0b21d892a62acf983625588810be5b5548e5982b144cb836b1465f05f0449ca1f7b2b9ad299f9c6730b2b66c506fc08e778e82eaeb325510e07ebc96e769ac2805aa62f651c088bd514cb4809f0bd21b54c07422014a506d3323a7be6f1a40c37cedf66bdc9cdd861b65e762582dbdc828f1ea1087e37c179f60543590cbba08095443c0a067b9e24d4ebcd74cf6b7bea5c442f212f641f35e3091d625e035dc7ea508c8a64be34a0f0d6658babef6d11960873c41c68e85ba409da164fa8d1f94ad689288f4c42570b1a147cf031d05e15d3271a91cbdb115f7848ce93c38b204313968ccad75b043cd325b20b76d9c6e7e30dd592a317c7b5a76040828e6fa8d723de8947b9ac746178b21def3c9fe9b1cdc5fa4bf4823cf8d86b249b824f95bd7bc2770148c6670eb1d10ba252a89849afb3417d888581556da3d92f16a3417668917209a97adcc302cd0cc6d2eb1bb933af484890e7b963e8ee476879f58127608a2807382b9f2c615c9a4f9401fbb7a6395b3521df563f55bcc70c339f2c5c4c006f47e2f58f7c389456cb8c2f118d83174b44af5f186168b2fbf34ef6b3725051fc9e54aad607101dd37d7e47188707ae310e1c9246b8ebdedb07f09cd61b1d08f28a67a528ebd3aebd81e5755fd9d057cdc8262a55b4812d07eca22e9ddde73d1ff9c267b8316f3388fcb8a55b14ba59a362acd8c8bb2fc6109c12e51f2fdf2b9a4fa8b241022abf071ca3855e964d4764ae3f2f82e0ffc39a9601cfbfaabd7a62588cb5de2ed13758bd744024ed4a80aeeae8e8c343adff11b31206c7a4160169413f705f28c071d671ac46aebc05d6affddcc22c0a907e79c0ff553d76f4186724826e8733191276453ab471db1b1ef008992f5f6c1d19b8c9fe0358df4c9193d220ea6e0a340c91ce0c6696cc73a38f67c0a328c7dd4ec889036f155f6da7d92250df604a1407f00858f5a13fce4aee6fd4fee7666581b89a0a6ab70ba116d8b0152c7f7af0b876a7dd1939ebc55c5aa15899949c59c7fc5a9c22632336907cae6206dc757e0cb712ae486b925072bac075b525a12db94bf750dfcda0eb2f0551df7e4616f10e361cc5442a54629581308887e09d9b8779769223fa11bfb42e1852ef7831b7349c4f88ca2a70edfe2792327ba8f1c4fecd7f2ba2a4388ecb61cdebbe48068f75ee3aa30d420fa63a2c916c5783bf5af6ccbe258adb2efd06995c3971dc891d4bd6635f793037b8d7979dc04a0ff33e6a0acb6351cb9cdbea625584e9e42531f4d41cd1438687f8a57aa0a4dfdc5ee42727a3ff2be5942eb2a82010e58050b3137bd6d893086b3f3a15b806cbbffd8e872280b5494028ce67b5d488682240c2d0b652f1c4b32138caf6d75f849f428f4c2edb9cd2d882296782d51e1318c6f6ecf9eccc4c730d84e00539579f15cffa75d79cd578a161da56c67c2806288a8a747e76b398b170c73fede0e24624943408e8ea5617102f7d9251e3a7272875e4c268abf0f7debfe4136a3635319c8804cacefaf11345f74651d6735e94da4f8d03681b893c9785893f12cd22c310b407afb6588bc91cceeb19fa56f38eeb151377b0e42e2d1976717533d78091052af7ed637a10cbe7d63763f9088903f801d9e64cf6f70261fb4da07204541e7c1bf8a60707d2861c437618a3e2f224ef40cb22c88ba2bb576e539ea7a932bce54e9b5a655f8d0f947dca541c7d4043fc175988c41ea0e2e8266d4427808e0b245ed95fa6cf4381d7aabc5af1a113035e433deee7d1d50634b3a165ca9339821a3c9969fadf4fdc2115192b07ff5bc319b0fdb9b1e41ec6fab425af2559cc20f572ffc7c95fa1b7427fdd2f082016bc3dbdaac250420d122c5fa62195e14dc14f20ccfe640f99fb8982964d21e6983fefe2a201ad5961ab02d25c12d19045c23a10f551b14c5213f371094f3e58aa57a6939dd0bed6a8bf083ec0466a5b5b7546793be3e651dc68f8f89753f07157fe09e9bc432fcc6c445917027ca1b1b3a9a0d00e4a7a45a06657402528f10853f2b669a6d5ccb0e7259bd25ce56806ed5ce821ffde5ecb88acab7a5c871b063d759206b1b22324c00930c2975a2d00553a66c9fdd9b68e7f7c648cf340fcc727f1ab434ff6308daff1a01a0c1fbaae8320d8ad2479c63b1b02a5a95b387953c12c6626a9a67a6d3e7c6f3a309e533fb083e82236413cf584a253595b589023b0d400dfed9c9e9f8dd907c324625ef795e3c7c3dd8baf5b2a7a4e53192fbba8b8202f1866924519b131d0a13def1bfb0b650fd774e25fa1d464c232e923044977590763f98e252ed17e53cfd03cb7b7b454e5edd3f645d093e7d8e88f933cbe48958e6d4bfa67cfad048f95131536652b5fbfdeecf1e5a06ec936f0ddfdf29d25dac46ffd50385f487161b27e9f7aafd70a34b320e187c303d4b3a61acacfb7f7bf42218e2da9304602687aa936dd7fdd3ed6406b7cbd072fd946000ef5109b4ad19605827d7880a5a4064342abfac9a17ea8561b7f18bcd08b69ccc85f829ca96364192853f4543207e7075405db7d682ec95740e7e9b303618755160f309dde152d572001e8d9e0986d2a1d816472aa51588a1b66c573386428080f265c2d621e2450b494bfed9e8ec9d89406d3c4da64565eae9ff1c47a8da6547aa461c96d491ac2e4f9726ce9fd6a1ec70289ad82e598fc858f1a21a33aeb66aad9a0f11a775c600ed89b390686a4d1b9dfff96c26ab882787f10e9e1b5c871cbcb4c8f420e3d0910daa9d6371705b49e94bd5a4fcdd7215995dfba3984833c6d2010cc8f307045008a7dfc8f8712be9e38f0afda6b1cfc8f1bb776cd164c5476036b194565999a41e2411e61987117134ab68b0ccda9e9e7d93f152a273464a6d3ac35106e5e47e3d711130508d19534d84d2e28fe58fe8b3cb25cb37fef12c344c2da5d333d092fcddaa2dc17fb4b727d65c21bfd98092a7dffbbf29df94657f4a34c03a188a1fe4592e973766d51cbf5efe06b2155a1ba0192fd39b79cb9c7f3e920c9905131148508771997d02039b2a88f8535729f72c1542ed60946a6291511163feac15ef913b64e7109398863c12e6dcd00051c458362db1cba790e16e3b65b56adb11b4b2991b009709efa90628397d4b4414787923e58729239eea2c56b03395c898918e4336a04a70c2c7f8fc2fbd8bd8077c8e7552348526a9e623c8795c547c595fb2bd910c7d20a1f6ed83350b8e967a89afa0919041ab8cfd10a48084760641636cd3823c23e62e4ec771e87c310013253f701156f99193efc547603230b6d1cff41cba0ba11d307f9ae8aa59a97fdbe9fc14ce728741518ab0e2cd021ebf78ef39bd19b3670654db6637c7f2b631ccc592075a8ceb0748bc848580357d3497d547135f1001f426694031b5adc512866f5195294b62e32800a1b9695e6857e3ee8e55ada84a351c3469a3f6982986273ff5594a81d4dea1bc5e6bc7b51ae853ef370f9840c4de38f38e98cdfcf1a3f1bcb8b178fe3a48938c3d2b635fe74bfa7cc52cc6c465ea0ad861568171ee3cfef940920ba23b7cac390296b3c465cc41325a492b76fb3bdee516745782382e5055a00dc36014afce193fb9e9c706abecf20429d4ae72f6b4287ef56825270a16fecb0311444f3c8dc908e60a0b429c037451ab2131296ae0fc7e0039a22d882e999cbca89fdcfab823faa7ada5dddc33343f8575086e31a8e462a3554ff8b3517bc186c08c2632129f646240a2d48a549d7ec59c65674adb9809fd44f1df23d326f7b3ff1b6e748bbdd320c41d1481201f430b7160b1385bb0737678a9b9bf0f7e36cc6b8fdd5d4d4970c0129f31947b2cd78cd1207a2d6513968b45d2d41c3e029e0885d73e6771edfe3046dbe0442e83f9f26652ac392aa36422151ef7331616dc160f73440125a1ce4001e048c27e4d180a92451aac9fde0530c4535689ff2e416e0d23345261047990e90109620d1c69bdd73f59bf62dc7183c90d6cb6fd5e5e75ce3364d6584b7d0ad8824516eaf6205e1bf6b21964553cecd60c1daf7fb9c0bd748150b38f54c4e2d593b424866b9e9032bc311898d96535feeace72a0a832c669567605109106a3326f986b483dcf7995909bbc7b75b0efd017e240cf231a3b259d84e90b8425ad3e774637878121a582114ca167f5178cb8697f3f5370d7dd4de13943d27439ced7d5df36eb1e3ae4486d1e857ddf4a084172277bc3ce5461797f043cfb9e126e181cd78e1bc4d54143197c4a427c494c4ab82e602776300bb334e12b1e32baf8e3eb0c255a56d8bf29a7034baa8bd922a7ef347c5efddaf96c215a554ba1857a7311dcc3481809eb7980c536cd0ec96c5bdf9f2b1b7a8f10c044e04460a6589554403de4e9219ace4f027be520b14e191e201757e4855bf5ad919799e38bb7ee35ff24a229b1fdd7ca940094299539a65b5cc8aac222c4bb7d8487cce97ca0bf8a92decf6b8451d44a3be2131c9cf36ca1c293ca4d3ac06d6f2298cf3ee70042dfb43b3c1ec210a71d76f4d47b5a4220e0fe9c8de39b153cb2bbe21bdb46864318b0c6765990e0078cbb4116ebea18ca1dafed45d19976f5c05af67c8f54b721a3f363c1d8476f2cee3bccce39b171ca23cf0779dde6e781a2f05743be1061ee27db356d4d68962f42f8c2592818a1ad56584eb65ee9e1e2eca547207fdc41d17a7fafb7680157483fc0e1602a5d2f4d4e4e186b92024de79d589c01c53a62c452a8902d19c3019691e575c6f5411cb5efa761047c08ea8fff0f8b591b4329f795c51568337d27a6ce7baa717c7c425007b351779fdfd74f3c6df0ab3a00c58341b14cc2423169ece77c43c0f807476afe8d69676d1b11485be1fc4f9a78adccdbc64626f2d40ab13657535a841d5c66a67a042ae8df6e70cee83b3ffa85918a09b691b7e8b5db1d590d65eb2e618cca28714bc5e6a56bdc5c05a2914ba4bc5c3992d7fb0bfc73aa0536826fc67113af3276f77e6b9a54dcf36a08736dd9a5ca765ed51c2e830b95b3772869365c4c1a6c3ac2099822e9ef6e23104471c570802096bffc2b266d49ab5ae23771da2b2412ba74cb9f9b18eff8baa0d69beb752378507186ddfdfbe6eab7d00a4f403cda0f512e75d1c7c045c7a2dbf638dfcfa40176f8cf6ec31ce79f9a662c6cb007e8ce0d14724bb85a7047648106c4c5768b0558a84dd504c38cfd1aa3d91ec5f7c49205171ef76c8eeebc7a5eeefdff975547b9a3966f8c6ef034ff7cfe124e83f3728a2dbd10656e162759b866f53f1f2647ba4ea4104df128a7f08ec6d7f5295cf569bc473e29b9f9589baee56f0f86ea76cf247a54c7b87d9701015073acef373deb86068e8bd40186cfff4915dd4167f0c0dc5e955d0bd365ff0fa5606d9faa76ab03c824d8e8e6b04f966ff76496e189172d2d297be2292f75a66c2f7ee59c4f115f3dcb66f960080769e730fb9cbb5d367e4c67aa48e8f95d6c974c6dd5dd344872ca1e4a37d8c58d7812dae494e3d8cf5f9930b0885e0ba4cf767cb866faa04801690cd963b70f42183595b855cf0a7b26626ce0a10adcbed47d4709a1b0c669a4d9e6177208670b8fce87e66d167aab2e4d4119d65994ab40c4ec43ee0f799806a451a5e8f354a2541d3508c26ec38a68565238ea44f753d2d398258e4c70899971bccd6f116a215f0ad9a89c5f5eff80c693920586363a740a446d56525fe1db8b00e294889db5e4fcea59416d8bcf6a8aeb6aac3b8da766cea7d2dee1a846af200d21c1665dd855eda5ef665a4f7ff29dc8798565c6ccce476449544a99c0f91005f1450c1cfb10ce6c03c054399399ea664e03a81a9c61b21ef01011aedab2609747ab471b425d5ed417dc29eb7ca1ed7091e6b896146030d3d25219f4f5ee2ff41c6c4c2147899f79416d59cf5bdb8f9e53887a1c962a9480e294b4b779e7199ecbb0e3cf19e1e7e5a8813aa1e6eea1ac71881b75d42f47cc21a298802d7c56e2e9b62e759009b800986d55a49b807815217e696b60c67f0dc5da5a3082e23845d4a24e04e7afc78d26365c030bba24a3c77cb447ce470694999bb92687f2fb9df20a246f97ed4f27ce54a188a369a1443827b073c825fa73758fc8f9f04529c88198da4fa9e72ed91c7c3cde1dac6a3fc7b335241e94523499a85abe223b6dd8b2e909c12445a1e9ffc81eb06703e4c971208911861f55405424fe9a3ba9e2ed5b6912895920771a0c7ee3929eb4b56e95d808cc3fbb77a5a9fa07013884e9acd4999e0193619cb7ffb0de5580338719e91c59c283de37dd4a9c0f00c9e59807f2e1d1c7e49b5ee493851778777a45865106f885becfa95679a8ed40d7d8cd9d071da8f688ef78a679c6a7517f2cfb647d61ad1a10db5988f0f0c8610d9a145ca49fd00bca31c6f4cd80180a675d1079bc4b69006e9892dc97ef31ad02bbc5c0c8faf0fb824b1af4f9469e0451fe442cd19f4192d03812dec3b807dd3cdb3644bd18dd081f4d268c121ff26ea897e79680ae05c8efe236fce45f7e970c22a2e77f0c692ed7fd58d4252f6ae28a6398480d2229721893613d3e05e860c3521529585ffcb985ab332007cb83eddf324faaf4816f73abb7150918060d49112d613f023abe04e39c48799f5175d8e31eeb059716949b909e413650b614ee6274e927e393d2714f9a0096e55c867d263251a9dfee12e0afb96a5f9112dca836cc1e536eab8647a86c92633e9a4e51ae00c04b4da6f8f53ae25f42ae109a9d4b9edd77ac1947c2fdbf0cdf90200b953f26c7f614da5e8884ead66c9058fbee4c86762d26b744940a6d3720128a61a29e948993fcaf5f2c58787e7fb02a7cad4dd0c553593e4f32be4f0635acabbf848dd5ce96fbd2756bac20116e507201ec4a8ba0fe5f096a735dcb4d6da7b96ae2030608572204a658b3e5ca97a30d062aca2d78c14a888e66fac89c23e3a694229549f32ebe133dba27fde24c4768aa24aaec8fc48ddf72a0a58aa3692098c654bbd3f03b470ae1c0b533cf19ae6be386611410effc6e3ac133dd422e958602f411f10b42375c42094c2bb0a96e652afae2ce9d818318163d045897b511f21002497b8114aa229d79e77c8f561ec541846bf08a8aed6d2eaa9bebe41c9db4220ab9d73ea7c70cb255e741ff4c0f8da2b0922f122c8daa478bb9166a50a92e054bbc6405a73768c98fd2d71570cc50fea8b70c437fa907de50313ca9a1d591539383d40b7f69044dfe261c219ba0df1eb528453ea92adea79e01d2ce02be67d88993a73e1b3a5bdd259d35da4607fe8b061d0d5e56b3300d089f788d85714c3413213e03e8dc03e76a4ff5a052c061b07535308e28b4795ad41e3ae1ab899dd8001f36607e6f63a571b2908ccfd49ecf70c516ab7f231639fb50589cfbfb70a6873df4d8cc7ef353e9a390fc6ff33bf3a06a6e734baa336f25654a3dac2c370a294c32543a75fdd508813141bf54281d4f66b9925bb6a7d4edbfc0fe48dd3817ec5e588a289f4ccb258257183bfe3a17c43a8399b0b7d90d83eb6b570e01f998603e01c691692801a416c4c9a159deb3d41b3001b0cc8df7f76f8db6430f5ac962e1ae2adc64c0eb5d06bccc19703eb40e25770c0bd4277fd668923785db1934a47769b49e77b9b97b8986f4f6a1a2f1012b8b7b4c7d9b3f7faa28d35f9f25d51c4998f3cd4eb7a34433b7c57a8cb81098cd1732c4133d25f3e6350a52f8498f80575baf2940364e57ec22f69d51ff3ac1d6042773444f12942458d717f5db20d764042b4ce4a231ccbee0ea2ee1560f59f88791ac6cae7635ac5fa4815fbf67b1dd71e4520623b31c09dd4487fea2c38f9ad3dffb193fbb9827d8cf68d28e5b1b73c82750c4af0b1deae1f939cf856f394c49885d89fbce8919b179aaf329f58a2b790ab0eec865a691c8b640a3ad55f45b89075057deb92589f0201db1c049f3e359e35a0c00164226e68eefbcbaa2d018eebb2e0449eea8757073589f3a587e0889452664e93d237c7980212318c25a2b4285ce4134c33779f952015c95141781a40cbb7bd377c6714a93ffb8ad215023c98c20bb9f672a16ecc1c795d55d7d1bc1bec74cb61b2163d74c0cfa92b4ee02dd9a16f6fa8a9b467e3c33c2e983fb55cf17596453956ef31df1d2141212a2a4b7b51f58e14b77b3ffd8bf5d6d52b198b9574777aa9a6adf25e3abbb645ca9f17559bd0ccd131f8bb0050da83e618d424f3b373df69db3056f9308f81893a66f1d57bbd3ba2e451833baea3be90c7567209defddb2d3025d10d11e85daa3fc459aa440fe667a2af8014ba150fe0d59a4b6ead5dc57139a982c25442553c1288fba505067cf671b8a24da1bad4fa851aed433373925f2e5700534132369ce9d19698632587b903af33579c7d6ca5e0e2c20f357fb72953336e3fcb6622e0654f578cc2714c616150237742978d6f703ddb7b2de386172dea447a63b938e5b8b83893bc5d26735558d2588489ac12555c3ce17523e2378246e007e60a6535f9e483decfa0f166e9b90b0364e51f1b5bdd89f514808a2856f97c7a11926ad5dc2d584c02d226a5bcb9572da76ba6ba000601ecf2a580229cd2a1a5a687968931032ad7b0962a325ed05e56be63402228d404c22d743a5f79da4d42684c5000742ba96621270f89b4f8c78ac7165241f60ebdbd14c5aef9c5a29a13e0b6050a4d3cfbe5e8d53087d0dd19f3608b1bb4bbeb3638ea0fa221c1eeb5d0d01c5a2a218f91ff2b0363dc3cabeb284035dd5246df836be5bc35684ecea2a37a3a48a0b99e9d6b9018fe2f3d16894db989ffe5a2771b73aa799bb265acc420797eac45dea78aeb84a8b083f815e5204cd3e323e925b86760f9e7fdd4b7cd0ef27ecd884f9c2d0957dddc2f30c864db5749c1de66db1fe1053334e97c7d10598bda6b7dd301790009991d18c7786f8a68a12bb72b71191bb7e706758ae6c0767beff584eb880b2bbd2fa75a158340e70232615d5c5902acae1c2d35e51617f5408b4f13ee16ca2e4c2e247caf0b7d4475dac2754e5ebfcf6cd1d1f9905850c73a97c515f08cd2740000746b0f9e9accbe4bc82e6b5c31044831faf0dc296b79cceb5ffb3905b43c259f98e18771ce713051b8bdbb7b7312450ce9be8590a69f3adacd6b0ef2ce17d328217d95c4f81a7c2c87676c456e204327ad6c4e2c8d6efd4cfd9b6edf684cd8a40dc7102fb6c08f0da793b439ae16b8a1a2e307f64d0a62f79fd51d075294873aea60c7aa40bd8cd29c63e464df224da12792fc9eaf6c033e1996fab1c5df91f607cd8591c9cddf70fed41c4c09cb92cc75e4252ed505c1e2be8b807cf4fd2cb0bfc6c58c7cbe337d79f67d6e1f70ad29b24bd78d095ea4d07411230069034b74594729b131d7f737e4b8af1c291ad196ed04d9afa37bfaafcdf0c95ee7a2594ae949e490b4b5ac6f5efc0953a43bea78d893af76a7b5237190a05b5052cd6fccf338451c10f249aae98fb7a64aa1358476ec47d7163c6434e1857e9b8a116e29f7a80388d6c0b3161c9d3b2e24989150584c1198cd69118f5d881ae6c549ba7e947a8b0e3d1ee32282e015990e2708ed406c9080d7028d802538a47225a7d8275813b3ad174a16901b8d864a9b218a338dd5948ea2bbbf4d697b25479bce44ec21cdeba1b0df47e02d1a6f8b7fbe3ccc9550748a5e36d649524c24e751dd71e3d68c4f7885ee6a9bfcdbb3bec869d725a753aafb5813c3ddf9c4bba86109106ede56fede45d9a909c62810cde80d5f48308e9968b13a4eebedb97ccf2fe074d82c1c5ae391a6ce671b8e1a91a6ee1601f257cee9ac3fb0c309468efe8e0a30d83a45913149c6a234f851f2df4c7ce5955462fac5fbb00a1edd0758ebfa57ed925182031c1b4f9b385391e3a6db13507c520c569a41eb9bb07592f863c468d5ba67c0d85676b35a25658438f777c4ef58d2badeec82b7467f174001554f88bec150138171f56e6cfdd9fd222f78dd4a9f93251717141120a5ac94a77c8f5ce970a9dccacaf0d26943f8709e04317ee8f0fe510a3d1a07a9fc406235ccb20c3591db55a7ae0dc35fee36dda96e89aed2e77baae73597d7e6340608cfb51c4043a6c548f179477ee39259c03f40342d1d1de6761b82df46b1b76148a2004f467bacb3bd7626d7bf562891586d3d142720a0e84997ec6b75c673281939b1e36727814ff0dc6733233905e272dd61c759ce52b28b4331002b222fded77b839ce6778a2e5829628c4e63c318bd24440eef7c9385feb45d5026ea9a0bff802ced5174b60552ed31f9c418d03ca5a3989772c609c098cb40e4e9584c9dc2b1e873b211eeac45af18ca20f6361c9aefb8a3897ab341f5446830a2492d9bd78e0b5fbcb38c9620d43c8b1746e682ce4d7ca186cb252e685721659c5d352fb9bb8e2ea176ad1c4f6c8f538510ff950bd6a59ee629aaa01ee94e98bfe5879daa6869dc9590a2eaf7ae0a4c3fbfc437175669ce17da1ba244923f772260a0319b84d2d6931ee2c8d105a15feeb69f4a73c8dfa1aa46fb0bbb38ecd6fdf900e81824638a08af4aaec89dae41c4737a2f2ae6eaca3c247637d5b948ce8eb04a7248cbc51faf822cbe2b1979b66c3e3f3e6f889c6581ef8fe337ee9fa54c5279b8a76e4b43d0fb639bcc1be1fe3a21c39ea5c3458905b9a0f168331c9c8db98dbafb671fe1cca3d961cb60d935d2eace11bde39ea999999b558a5330fa98aaf0ec1835a0a50d1191266153ae59759817e4183f5c9908c2667b3d7faac48b5a3d2ec7fd059f74ead37f2b41d54edbb22f3bf45068f6c4c85e4397bc19cf0b238c79a40b8337205a71f5309023b97b6d901a16b41ef3b7c9a9d2e77f47e1f13875615ed62413b357c84f2d7ab3ccd1ea14b2eae160faead8a5dca9267cc88c1e538b36d3266c0b708bbb40dab30f2ec7561dc969118617c86fbfcc823c96f2389bac907e1c96c073de0aa7e0af766776a8152ef031c859f09da7bc798b089a0295f46c102cb938098bc18b952afdfa818c88477ec9cdc7e5270b4e778e1c55cb105bdaae5dbdb2ef1911e5181d00df05187c130a1aeb78e98c4d27cf50a7dd3d688c79653d31788de0d4c502269581c62489bd9249e8642352b8599ea15e17ea684d8168c6e0fc7b127f09950a8d9e40fe4d3062c16725e59891476bcf09da4a508426373e0487570f9354d8be1484357c83072517c5e430cc98ebbcf398e4660bfa83d12fe5b7674eb1e13050e359d808768087fa4a3402f10795b71fa6692d53aed5a199d1cc0d8dfec195021e0192c251c1e66f7a39d3051d48ef05d495d92935e5546f9ba7ae3ec14a6a63a47ca74d705299ca5bd14cd655b2f83f5997d049651fdc8c24ab831e1d157ace2f71e9b96917c3c5c2af1607ca8d1bd58f2c22daf34a4d539f711717198a8a487c4cb2563ac1e814fb5b5db712439fc665e9fff04a979ad3d51f1eca75828fc25be2374f327f6260dc608eb33b2da2ef3bd71b3f954301322ef0c81d36d7b8a4b622646fafa6a42ce2e7e6137e81f7968309a4838c18fc31d3d8d322b1dcdb486456190fce85c51768e2f1be0e37c21d1e22ca56784281047aac2c33271f20b78d8768402eefed1b4976ee3e88e5b533f429359075a89cdf9eabaea0653041f10ae0b37e4aedbc39848714a61008571a188bc960410db2e804d6dfe5c48b68917cf1dc47387fc068687812c31e3e4adb065ee625df4110e2addf5ddd5ed2c416ca0e350f66e9b5be202f3b550bf65cc7c0fdaf04392a1b78882927e1b62b4993682424de0e91194e832505384f3c644131f5aeb150da3cd52aca5a1da1c86bc59502804520425d73576517357de54f4189e0a6b6bf808c388ac910a4268e09a2db5621649cf9061ec338767f1f7b80644b71d30f2a3da82254ba017b9b61d194be56c3ded1f32da8575efce473aff535386925da265cd7998d7977684bcbcdfe0c4df4d63a2590b99d85b1623f6745c9e5f1fbf5449623cba5253a19e8b1bb688177bbf4728bef3699915a0b5a08b8107f67daeba577708a8651e85d826ba659c96d41008f1e6ccb3a27a6328e352e23ac9a63abadc2750732229c11dcb06ffc697e5d1bcc3bd5c383546f24bdeaa2eb3165b5c664961ccd734f7d62865d4ab8482a4f551ce12dbadfc0ff5b412624e8c6f0b280afedac4bc8dd2d44fe45fc6b50cb68986b9caa0ea17bd8f1f794ef5708f8471e6caca7c2b3cad6f4c2e15a28ab772cda3c76bd9b87fa3c6fc5591c994f20fe5ede6f512fade7cdca0fc08992f623e9d49ef6f9e61da96adf07945df3046d3dc311c4f4f6f4590b7ef7a7436b5f0ccf92ee11014ae7a87d562398550b6c3c6b92633a6200436198a3a6619f2bf36f700893cdf3e16c708f6af8087c83a000eac669d45eee8f0ccbe6ff4c9f94391d1b15c2dd5c6c53c73950cbc12fa07c58a588054fa372b5ca2c99f425f8fa4a55e663c4d2f80f2a420baa6f01dd055ca5b652907999122a87a4095fd3a9827669bf89e7c623f11025a8506b26b8520daec0345d7ef0ce42e2f3af153db8a537da25708f0a566f0efa624449dda742ca5e358b166f6a850cbd35f3e14646316b00d08836a341e1de690044d031075a71ba0eb70bc555306144bca473ec23785ddf540a37414c721f818e8c1b1239c980a03c7b8c3718b2784077b8fa887ef6a4c9a48f0cdd45876d7861c8cf98488160e56b9f030f5c5bc6c70ea3ff5bfd6698c5e79c21a0b14b94bb6939d2347a8ae95c3bcd43fce72f67c14c541e2b02a9955651b5ba8c3516573b2a2552bd8578eef41cae733fe02e55f06313ea879a2a60ee04109c9bd20e11f0b1076b2b045e52b5a582fd9ca6743ab2ebb73442855baee593b7f87001e9aa661e79b6e1dce3c1ca7eea38a685e5ee4900e28393b74188afb285e31a09b64bb45b056294c1231f464dce5a4543d0140955b66cb85a2ae5e7ed2dc5755b3fb02f1728074a20249e4d3b10c7407cdd3a0fa8c83d86a65246198fd699ba597f77b388fd6754092993459bc8236ab8004ed22e3e11ce05464f0e245a7d006a5781597a13cb270d6d70974c5f401eabc614254068155b2705bc60e1928d732e4be5191ccc8e63854e166bd837b9f0bc9ddb445ea1a77645341ce4bdb602d681982722cf03b4ab6fc049e8d13b4578b9237bd60da1e7dfee566599082a3fcf4397cc94167799c7a42d7642b71945a3dbf54fd8dac16ca87cc30472e79430be3517e8074925d32a1798a3a5355ce0dec12f56c2c7893c7782d0b4ba7274529027cbfcfd7d483687c79502ab1e1f03f517e9b43c37b901956fe70dd5870da8961039b57702732486df39bd8bb2c57900b62aedd8dee342731b53cf73df0736820def8a603bd114794b38d26eca80967c589a84edd2eba17d10429258dddfd5643bb236063d3dbff8b980d025476b377732cbd19ea2be7ff858abd3ae65bfc2abcceb019533e650e88f415cbfd29ede785821ab5daeda291481084db541223e3e985140e978fe1ffe60cb4ef9a1d40dddf4ad48861051717aefdd07712586c4b74b9849c23f2fa0d930a1d2bb7312eaf7989e37f69270d4d0427ac7cd14b7afa24299bc795f57a72122471435358b6998812f97dd6d42e7de7314942d51933852290f25e11af5d633ae18d942d00ad05cc7b13e690fc5ee8049b76dbdde9accf3d10e953c1207aac09c4a7d9450a1153704581881eeeb2cebdf985f820ae976c542c80c6b9c6e3af675c94649710d2bf37e02620b230102726405019334a77a4fd9d2f2eda041bb2c41236d22beba53a0461292f53de31e5bb455b5824d62b2d0a0cc7ad519f43728048434d2a0fa46ceb38b6810e41332946acb418bb00ae43dea398e5a8a542fdfdf29a3805d8cf303a7a1ee74e15f2fab58295d1a9acc20ad248670940fc61b27aad4b05de65017df6939216ca37ae1736fd830e3da3872fa67a5a21c5e08cef9d6a6277b059a26d49b332b797a4c4efc9c211bf125228b14b694b8d77da71c10b7cae6395857eb977740840520426762d27a7a54c09a5becbc137da5767e7e6b357a2880e05314824e8957f00c4ff5bb62c883db5084e40fb2016b950b8557ff4c17ee922c0ab6e370a365ccb2897f701e7174f82922dd422532a0b38ce545c94a3696bb6b93732d149c0139daeb0a26e968ca125886ecede68a3b66200a3bcd460ead23acaf1d972b5d32eacf9f5695d1ef9c71b7ebfaf9da5b71b90e6b13ffad96870c3be37601d25a16bbc880388208ac39f3011cdcc873f63f64deffb6c7f2003bfd6c57155ee78bc50ee8c08f0229a74ee3ad986d565d9073170432809e90ecf03b99d140848ef42f87e5fd61f983b6c058eabe3460da0f5a9b76b382d4d79877ade22ac67b62e6c66199845f79fe019117bd0a2cf9919067594f61cf728ca8bb4dc47f916dbfb41dbf331842d259ba9ff85070cdc91b9bc96f92c46ea60c5814e0ae2dd38c9a705f68f5490e81531132b751b2222da3bd6cf7701d68bf376a7a679c77ecef2012a3c0e5f1cbf69dd2b3944e393902f9985c348a73bb1deb5e55ae09357e0a134bed1c9e96076145f231e70791230fa0e7b13bdf61c8294bd46b03b2079647c4c61d7dbe53fc57d064e20c5382804dd5f550834cfa91872a2437712ed9cc28018e5b9537404db30b3ccef71347953db8da498b1d614770ebd1fad56fc843aaef6a1adc8be54c770167bb508ce25b681dc5a54eee0b9645fb1f0724c0abc9434424e051bae3dcfd4e008f35354bb2c86de0e0623d34fa739932866e7f31973ca9cdff933c6c93a66c971fe18f80d9ebf59556269cdfa0d57cca4c9c482aedc4e881f0f107d477afc86b8d81b90dca0b7afbd679a040f6cfd2302be27fc6da5fda2bb4d77a80ba7e0b6f3f63e11670ff9fe1d19ded9be5af3f14ba397cf3b44864e05f2c88cc4dc0c9a7d8d092b374ba46f367bb1f201c9f2b7330a7f994e3394dc4228733fac34439876b48e846afb0c636487adba5b7428c18bcb673e78095e500fe40a443b31ffa50d3d79803d1e1290d17c076fe93541f9b9378f35621e03e0999938181bcba3664828cc5e5959de99c4ad9776739548462598329a0f12a13ba429ce160b3c20ae8ce418a4398f7bb8d6536f7abf9e5f366f7f35bcbbeed64e4e846efca0937a99f2ecc0bf74867044851bce5b02f940e088463953fb9b59b0c4eaa061dddc9f369f58163f3b2aabc0b6f3dd7db45f609ca6cee18d7ce555a78edeb7a391dbea6192182af5b740d6bf800744de7df0d6a3e2f9e0119c6b8983a2bb5804f88b4fc582536a7cdc689c1a29555075486d2f8e230d131ca66946b6fd6972f3b106f599100f3a68ff70116fc3b7ec168c4e0d9939842d7e65807630b5a740f877169dde52dce0ee92c53f5398216801081166676bf8966966991a0cab263166802935b7ecf6be252ae7726e1a89d9edb5c4578e2bd5242155dcbe1d0eb08eeb298ea421b064965b5c2f0312020f557b9f96f5d8784406c0ec0691c46f78928e9a441101e21dc2f553653f8ae8cc514f51dfac2c331210546b2ec67937805a6cc9119d94dcb71e3ffbd9cb97c7b4c8e292428b28dc8982e1a5803dc2d4f3fe7b7001252d07c293f6fe3fad8f3b962649eb39ded01b4f87870c9ca5bcf5cb551157e448b12b9cecafc2d5629d603e36a85a43ca2c8f9148da36eea223c743514a0932414baf27e39b497c5be6532041e79cfda02504ec39a7b207bb498599c07ad2724d9e05212e622279751b8e4fd6a10000dcc62ee8c72988a05e6b0565411d8a31b9dbb6dae7555ce12b12da6710a34d00a6b8463aa53c38f2fc8af530badb6969a62b7c2e314a1e1db9aa847d2dd00f0fdc9b495ee8e9846d6ad2d40c90d677592ee047052efe0af720a4fbd909495a72603d72bc3edc8d541313f7d62d38d13451fac121cd441f3ed312c618cc4be2c5c01ba80c7c6dae620565f7af7b46edbb5771a9c3df5b436ebea748b6bce6b37b493ef2754d0cc3f099bc74baaa12f1c466af2ce7564aa893f4029709e4cc4bcd6b0f41a0d86b73f455bf7cc584c17045107c6f4613d98c6dd4b4b125fe14cace3bcbf061ffb541dcad8d937c4da3d7dc106f34c3495b9aca4cd23aba68d77f2631e64f6bb428f8b4fd55ef038be1196fac50767070bb0483b9e6b3490cfb8b11cc8d425875dd8f0cd256c41740176f0bbb3c8d1c764dfcd6bd6f7613860815b9b1d73793f8160f1b9669fbe44a0ea680ef4e2f17040cde9005666e6b96a240a13b88efe6d0d1f8612ed884b32eb9c847fab73f951f3df5f7935ad0db328dc3c9414c1874118fd9cc56d9d89faffc76b8cd4c8f6982d6571980f57186ff2b0a54945d68045e4bfb7a34e6b35ee3dd01dc68d879d3178ae47781fef7ba8ee5c16bbe117e7ec7ed8c9fedb960ad74f20425441bb2e03361753ffe79e82c7dfcdc7205714cf5da6cd47b07058d4419015e28912ddcb442fb1a8d35ab5acc7633fbf7ea9cd381264a847f2e17f2f923f07d4d9191f0cd96fd4ab8745c49025beb265b74710ef2087bedfb8f67465b1ee4947cdab2e0c96ed208d61893d3726f583117a198d91ce6216144a7f9384df2c5543f808a493a96365b21197c1a8f28eda1b6d9d5324e6a248ffb22ba41cda41a3fa98b4c9e3c6d295fb0d174194089153cdb09e54788f0817991c492330e7446475e57bf599870744e452b9c7717193d430c3c518877de515cf8ac394aaf14a443c4d4c7199b81e72743a8b865db0507b74136697a23e6f7d8a7236e25fc568bde22d636ba1d7f4712d0932ec0f1d3d34307beaadfca3f184c6698e27df90a4d9ba5bde950f0bee319ef23074b7d80f695dd090df8ea066bb59a04885078fe7ca12fde78d1934d8c78154a57b6efc1e9921db2d1ec7a52ebec56bf8081dedb63e667f8be12e4abaf49745a5c99891cc6724c84af09a816ceb9f23294e7a8a7da36ab4f4b8ea9f26ae8c6eb4cabda01a765ab7866f1ae28714ed5961a44217752563aa0595389c24c4ce479412dff346e4bd077c76341e79306662b58839241b5f9d42e4871d9a7135d4ee7b3a783c981d5c7d06f28a0acb8405e2215d682beb9c48c70d6a1ca6b313ebc38b306bba7d8289248bfd748e568c7fc1b33acef302363cb53d2ee7bbdeb8748f73fa8e51d2f34d48191535cba965784e999cf4a3684afa0a295e145d27c827b446bd965ba304ed1e58d1bdaeeb4732bffada7ae11ab3ca71555e20a33acf11e122918ad7c3f574ab0051f6f4e99b23f8057fa7499caac47ebe7751b4a9366a8584692b2d1adb4c2aaa4355b738897538bfeeb7f8babf30b7210dd6653913fb4033076161444a69d4c49bfdd411495d99afa4d39f48bc149c819fbe2a90ecc1ffd83b540100e89a4b5117359ee7f63c74cca52f260b171ea3a0920ed0b0253f5b257bd3e97daf8c57c828f86352881bb1492edefca71030a047cae2a129acff90f2e79686e3b8e94aa703f02195d7074449bcabd2b2990847de28b9a445c3fa2228797427888018bda7abd376658c8826d5a4628707ae15d9f2bb1be0a0f7387ab810e6a602b8d147d305f6c3fb6c90b95f3206751c569d5b380068589f3f71e823ea8baa5973040ac205943ef675ac4e299844653c0842f1fc161dec9869513f860cdd889cfb4215a51e7ace3056de5f1da455b98775eccf6924e1b72db51f8e0ba7ff62c6d2b96edde992d88795fc8be1eb84d3b115ebdca6d5dad1b107e8877b891bc7e43a7e3050b7a8fbca724c14f3c9856345f1c0b86267fa74f97729c727116b1aa4399d0b80d50f0cd13367ed8c4d7fb06e53f13ab6a9b7fbd305f996e8b7d08c7e098a193e2eb9e541b0598055f57f32b6c5f33a846b339edddd9fb3ae19955413c400fb735df90e55e8b919f918d48d8a2185a92a706e9b8790ed23c2dd75d9b2cb2ab22eb9b2cfaa1f0b1d67011cdbb440cbf2987ebec8b2d5a842d02e6693cb482c860de6ad20e564b8699a4de0fddc76cec7feb8b8b82c12b725a50f504536c774b79423de42f95211ffdb5433a2533a662824bbb49bc5b1b11644cb11e0dba2da3ec935068cbe4d80fc12b42708e9ec5fff0def2722aa7396166281fdf697dc2b14280aac0cce0bad9444aa50bc63c803ed3ea431e47d8311345d76056f7b669bc37e8a90f5d506ecfa0b74fc01d8031906ba4d3d971fd18f3f596076b82292f7907b7a2fc03fb5f875687ae0cc082ad02da07f729804706046f8bc26ae68abde3875d6e8dbe586573cd857bd6d0ac484f7164ccee7b510e20cf929114dfaedb1fc5993d32c2c645e0434a85bca568bdf41111a07e30b5bb48273276cbc5a2a498e8c34acab048fe42b0be9bb002237d9cc19395887d8bd19dafdf058ed56081271ce198d20a9efff3419e3e308a71ed11fb3ac01455a9461f41281b1a747b6ac0e3615a4084c34276dc055730663efe1b065660528e3667cb20a850bc9d982265a4e8f0fe7d4627676f6ef212efee308a25d1195dad56563521a6c82dcdf59ba77140eaae651c330465732444abdc9f84b83d0da16d1fba309affae9ca2bba8a068ec93e20066deeb85e40d009171a3958b4e60a85ffc5e344cb76ae50c2eedc1c59a0131ec5c4262b8ff99933329b9e95af7d8792c1e50e1109c1f0a14b038fb6958df10477dd2cfa3438a5397a1e40a7d31f625d0d4a9f2da861fa2669b1a4c5f2de2692fbf019936a8745d7920d5db464d33b8dae48f7e8ed74c00354aec15109c131717cf0fe418290ef020f263725e6ba3903a9743dd6b4bd90833749d0df2770d717d5270a0a45ba13d4857e02c2f6ec6b14b9d386ac10abcd7c</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-default">
      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>
      </label>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">
    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" rel="tag"># 设计模式</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/14.%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F/" rel="prev" title="14.装饰器模式">
      <i class="fa fa-chevron-left"></i> 14.装饰器模式
    </a></div>
      <div class="post-nav-item">
    <a href="/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/Design%20Pattern/12.%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F/" rel="next" title="12.代理模式">
      12.代理模式 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">zhengyidi</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">39</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">5</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">7</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/zhengyidi" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;zhengyidi" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:zhengyidi1357@gmail.com" title="Contact Me → mailto:zhengyidi1357@gmail.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>Contact Me</a>
      </span>
  </div>



      </div>
        <div class="back-to-top motion-element">
          <i class="fa fa-arrow-up"></i>
          <span>0%</span>
        </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">zhengyidi</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  




  
<script src="/js/local-search.js"></script>













  

  

</body>
</html>
<!-- 页面点击小红心 -->
<!-- <script type="text/javascript" src="/js/love.js"></script> -->
<!-- 鼠标悬浮 -->
<script type="text/javascript" src="/js/mouse-float.js"></script>

<!-- 鼠标点击爆炸效果 -->
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas> 
<script type="text/javascript" src="/js/fireworks/anime.min.js"></script> 
<script type="text/javascript" src="/js/fireworks/fireworks.js"></script>
